#pragma once

namespace RenderSystem
{
	class MaterialInstance;
	
	class HardwareBuffer;

	struct RenderData
	{
		enum BufferType
		{
			eVertexBuffer,
			eIndexBuffer,
			eGeomBuffer
		};

		typedef std::map< BufferType, HardwareBuffer* > Buffers;
		typedef Buffers::iterator						BuffersIterator;
		typedef Buffers::const_iterator					BuffersConstIterator;

		Buffers		buffers;
	};

	class Renderable
	{
	public:
		Renderable( void );
		virtual ~Renderable( void );

		MaterialInstance* GetMaterial( void ) const;
		void SetMaterialInstance( MaterialInstance* pInstance );

		virtual RenderData* GetRenderData( void ) = 0;

	protected:

		MaterialInstance* m_pMaterialInstance;
	};
}
